Quickstart: CI/CD Pipeline and Living Dashboard
Feature: 005-ci-cd-dashboard Date: 2026-02-15
Overview
This guide covers setup and verification of the CI/CD pipeline and living dashboard for the rcd-cui project.
Prerequisites
- GitHub repository with admin access
- GitHub Actions enabled (default for new repositories)
- GitHub Pages enabled or ability to enable it
- Local development environment with
make,podman/docker, Python 3.9+
Setup Steps
1. Enable GitHub Pages
- Navigate to repository Settings β Pages
- Under "Build and deployment":
- Source: Deploy from a branch
- Branch: gh-pages / / (root)
- Click Save
Note: The gh-pages branch will be created automatically by the first successful deployment workflow.
2. Verify Workflows Exist
Ensure these files are present in the repository:
.github/workflows/
βββ ci.yml # PR validation
βββ deploy.yml # Merge-to-main deployment
βββ nightly.yml # Scheduled assessment
3. Configure Branch Protection
Automated option (recommended for reproducibility):
# From repository root
./scripts/configure_branch_protection.sh --repo kcaylor/rcd-cui --branch main
Manual option:
- Navigate to repository Settings β Branches
- Click Add branch protection rule
- Branch name pattern:
main - Enable:
- [x] Require a pull request before merging
- [x] Require approvals: 1
- [x] Require status checks to pass before merging
- [x] Require branches to be up to date before merging
- Search and add:
lint,syntax-check,yaml-validation
- [x] Do not allow bypassing the above settings
- Click Create or Save changes
4. Add README Badges
Add these badges to the top of README.md:
[](https://github.com/kcaylor/rcd-cui/actions/workflows/ci.yml)


5. Trigger Initial Deployment
The deployment workflow runs automatically on merge to main. To trigger the first deployment:
- Create a branch:
git checkout -b setup-cicd - Make a small change (e.g., update README badges)
- Commit and push:
git push -u origin setup-cicd - Create a PR and wait for CI checks to pass
- Get approval and merge
Or manually trigger via GitHub Actions UI: 1. Go to Actions β Deploy Dashboard 2. Click Run workflow β Run workflow
Verification
Verify PR Checks
-
Create a test branch with an intentional lint error:
bash git checkout -b test-ci echo "- name: test" > roles/test_role/tasks/main.yml # Invalid task git add . && git commit -m "Test CI failure" git push -u origin test-ci -
Open a PR and verify:
- CI workflow triggers automatically
lintjob fails with clear error message-
Merge button is blocked
-
Fix the error and push:
- All checks should pass
-
Merge button becomes available
-
Clean up: close PR without merging, delete test branch
Verify Dashboard Deployment
- After a merge to main, wait for deploy workflow to complete
- Navigate to
https://kcaylor.github.io/rcd-cui/ - Verify:
- Dashboard loads without authentication
- SPRS score is displayed
- Control family breakdown is visible
- Crosswalk CSV downloads correctly
Verify Badges
- View the README on GitHub
- Verify:
- CI badge shows "passing" or "failing" based on last run
- SPRS score badge shows numeric value with color
- Last Assessment badge shows date
Verify Nightly Schedule
- Wait for 02:00 UTC or manually trigger:
- Go to Actions β Nightly Assessment
-
Click Run workflow
-
After completion, verify dashboard is updated
Troubleshooting
CI Checks Not Appearing
- Verify workflow files are in
.github/workflows/ - Check workflow syntax:
gh workflow listshould show workflows - Check Actions tab for workflow runs and errors
Dashboard Not Updating
- Check deploy workflow run for errors
- Verify GitHub Pages is enabled and configured for
gh-pagesbranch - Check that
gh-pagesbranch exists:git branch -r | grep gh-pages - If the run fails with
No assessment JSON found, trigger Nightly Assessment once (or run./scripts/run_nightly_assessment.shlocally) to seeddata/assessment_history/*.json
Nightly Assessment Fails in Local Dev
- Local inventory hosts in
inventory/hosts.ymlare placeholders and may be unreachable - Use
./scripts/run_nightly_assessment.shto apply the built-in fallback snapshot path for dashboard continuity - For real assessment data, run
make assessagainst a reachable inventory with required host/group vars populated
Badges Showing "Error"
- Verify
badge-data.jsonexists athttps://kcaylor.github.io/rcd-cui/badge-data.json - Check JSON syntax is valid
- Clear browser cache or try incognito mode
Branch Protection Blocking Legitimate Merges
- Verify all required status checks are passing
- Ensure at least one approving review exists
- Check that branch is up to date with main
Daily Operations
Monitoring
- Check Actions tab for workflow failures
- Review dashboard daily for compliance posture
- Monitor nightly assessment logs for regressions
Maintenance
- Review and merge Dependabot PRs for action updates
- Periodically verify badges are rendering correctly
- Clear Actions cache if builds become stale: Actions β Caches β Delete
URLs Reference
| Resource | URL |
|---|---|
| Dashboard | https://kcaylor.github.io/rcd-cui/ |
| Documentation | https://kcaylor.github.io/rcd-cui/docs/ |
| Badge Data | https://kcaylor.github.io/rcd-cui/badge-data.json |
| Crosswalk CSV | https://kcaylor.github.io/rcd-cui/docs/crosswalk.csv |
| CI Workflow | https://github.com/kcaylor/rcd-cui/actions/workflows/ci.yml |
| Deploy Workflow | https://github.com/kcaylor/rcd-cui/actions/workflows/deploy.yml |
| Nightly Workflow | https://github.com/kcaylor/rcd-cui/actions/workflows/nightly.yml |